package co.edu.usbcali.unidades.presentation.backingBeans;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import co.edu.usbcali.unidades.exceptions.ZMessManager;
import co.edu.usbcali.unidades.modelo.Correspondencia;
import co.edu.usbcali.unidades.modelo.DetalleCorrespondencia;
import co.edu.usbcali.unidades.modelo.DtoCorrespondencia;
import co.edu.usbcali.unidades.modelo.Persona;
import co.edu.usbcali.unidades.modelo.TipoCorrespondencia;
import co.edu.usbcali.unidades.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidades.utilities.FacesUtils;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;

public class RecibirCorrespondenciaView {
	// Variables para llenar el combo de tipo_correspondencia
	private HtmlSelectOneMenu cmbTipoCorrespondencia;
	private List<TipoCorrespondencia> listaTipoCorrespondencia;
	private List<SelectItem> tipos;

	// Variables para la pantalla RecibirCorrespondencia.jspx
	private HtmlInputText txtNoCorrespondencia = new HtmlInputText();
	private HtmlInputTextarea areaAsunto;
	private HtmlInputText txtNoRecepcion = new HtmlInputText();
	private Date fechaActual;
	private HtmlInputText txtFecha = new HtmlInputText();
	private HtmlInputTextarea areaObservacion = new HtmlInputTextarea();
	private HtmlInputText txtRecibidoPor = new HtmlInputText();
	private HtmlCommandButton btnGuardar;
	private HtmlCommandButton btnCancelar;
	private HtmlInputText txtEstado = new HtmlInputText();

	// Variables para el nombre del autorizado
	private HtmlInputText txtNoDoc;
	private HtmlInputText txtNombre = new HtmlInputText();
	private HtmlInputText txtPrimerA = new HtmlInputText();
	private HtmlInputText txtSegundoA = new HtmlInputText();
	private HtmlCommandButton btnBuscar;
	private HtmlCommandButton btnLimpiar;

	// Variables para pantalla ConsultarCorrepondencia.jspx
	private List<Correspondencia> corrEncontradas;
	private HtmlCommandButton btnConsultarCorr;
	private HtmlInputText txtNoCorrBuscar = new HtmlInputText();

	// Variables para consultar DtoCorrespondencia
	private HtmlInputText txtNoCorrDto;
	private HtmlInputText txtNoDocDto;
	private HtmlCommandButton btnBuscarDto;
	private HtmlCommandButton btnEntregarDto;
	private List<DtoCorrespondencia> listaDto;

	// Metodo que limpia los valores
	public String action_Limpiar() {
		txtNombre.setValue(null);
		txtPrimerA.setValue(null);
		txtSegundoA.setValue(null);
		areaObservacion.setValue(null);
		areaAsunto.setValue(null);
		txtNoDoc.setValue(null);
		cmbTipoCorrespondencia.setValue(-1);
		getCmbTipoCorrespondencia();
		return "";
	}

	// Metodo que Busca una persona
	public String action_buscar() {
		String s = "no";
		try {
			String NoDoc = txtNoDoc.getValue().toString().trim();			
			Persona p = BusinessDelegatorView.getPersona(NoDoc);
				if (p == null) {
					// FacesUtils.addErrorMessage("El No.Documento no pertenece a alguna persona de esta Unidad Residencial");
					txtNombre.setValue(null);
					txtPrimerA.setValue(null);
					txtSegundoA.setValue(null);
				} else {
					if (p.getEstado().getEstCodigo().equals("2")) {
						throw new Exception("La Persona No esta Activa En El sistema");
					}
					txtNombre.setValue(p.getPerPrimerNom());
					txtNombre.setDisabled(true);
					txtPrimerA.setValue(p.getPerPrimerApelli());
					txtPrimerA.setDisabled(true);
					txtSegundoA.setValue(p.getPerSegundoApelli());
					txtSegundoA.setDisabled(true);
					s = "si";
				}
			
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return s;
	}

	// Metodo que guarda y entrega la correspondencia
	public String action_save() {
		try {

			// pregunta si encontro una persona para entregarle la
			if (action_buscar().equals("si")) {
				// Guardar En Correspondencia...
				BusinessDelegatorView.saveCorrespondencia(
						FacesUtils.checkString(areaAsunto),
						FacesUtils.checkString(txtNoCorrespondencia),
						cmbTipoCorrespondencia.getValue().toString());
				// Guardar En Recepcion...
				fechaActual = new Date();
				BusinessDelegatorView.saveRecepcion(
						FacesUtils.checkString(areaObservacion), 
						FacesUtils.checkString(txtNoRecepcion),
						fechaActual,
						FacesUtils.checkString(txtNoCorrespondencia),
						FacesUtils.checkString(txtRecibidoPor));
				// Guardar en detalle Correspondencia
				BusinessDelegatorView.saveDetalleCorrespondencia(
						FacesUtils.checkString(txtNoCorrespondencia),
						fechaActual,
						FacesUtils.checkString(txtNoCorrespondencia),
						"3",
						FacesUtils.checkString(txtNoDoc));
				FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			} else {
				FacesUtils
						.addErrorMessage("Por Favor Introduzca un No.Documento Valido");
			}

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	// metodo que llena el dataTable consultando las autorizaciones
	public void action_llenarDataTable(ActionEvent e) {
		try {
			Correspondencia entity = null;
			String corCodigo = new String(txtNoCorrBuscar.getValue().toString());
			entity = BusinessDelegatorView.getCorrespondencia(corCodigo);
			corrEncontradas = new ArrayList<Correspondencia>();
			corrEncontradas.add(entity);
		} catch (Exception e1) {
			FacesUtils.addErrorMessage(e1.getMessage());
		}
	}

	// Metodo que trae el numero siguiente para el No. Correspondencia
	public String action_darProximoNumero() {
		String codigo = null;
		try {
			codigo = BusinessDelegatorView.darProximoNumero();
			if (codigo == null) {
				codigo = "1";
			} else {
				int aux = Integer.parseInt(codigo);
				aux = aux + 1;
				codigo = aux + "";
			}

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return codigo;
	}

	// Metodo que consulta DtoCorrespondencia y llena el data table de
	// ReclamarCorrespondencia
	public void action_consultarDtoCorrespondencia(ActionEvent e) {
		try {
			String cedula = txtNoDocDto.getValue().toString().trim();
			listaDto = BusinessDelegatorView
					.consultarDtoCorrespondencia(cedula);
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}

	public String action_modify() {
		try {
			String nu = txtNoCorrDto.getValue().toString().trim();
			
				
				DetalleCorrespondencia d = BusinessDelegatorView.getDetalleCorrespondencia(nu);
				if (d == null) {
					throw new Exception(
							"No existe Una Correspondencia Con Ese Codigo");
				}
				String s = "";
				if (listaDto.get(0).getEstado().getEstCodigo().equals("3")) {
					s = "4";
				}
				if (listaDto.get(0).getEstado().getEstCodigo().equals("4")) {
					s = "3";
				}
				BusinessDelegatorView.updateDetalleCorrespondencia(d
						.getDtcCodigo(), d.getDtcFechaEnvio(), d
						.getCorrespondencia().getCorCodigo(), s, d.getPersona()
						.getPerCedula());
				
			

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	// Get and set...........
	public HtmlSelectOneMenu getCmbTipoCorrespondencia() {

		listaTipoCorrespondencia = new ArrayList<TipoCorrespondencia>();
		tipos = new ArrayList<SelectItem>();
		try {

			listaTipoCorrespondencia = BusinessDelegatorView
					.getTipoCorrespondencia();
			SelectItem itm = new SelectItem("-1", "--Seleccione Uno--");
			tipos.add(itm);
			for (int i = 0; i < listaTipoCorrespondencia.size(); i++) {
				SelectItem itm2 = new SelectItem(listaTipoCorrespondencia
						.get(i).getTpcCodigo(), listaTipoCorrespondencia.get(i)
						.getTpcNombre());
				tipos.add(itm2);
			}

			String s = new String();
			s = action_darProximoNumero();
			txtNoCorrespondencia.setValue(s);
			txtNoRecepcion.setValue(s);
			txtNoRecepcion.setDisabled(true);
			fechaActual = new Date();
			String dd = fechaActual.getDay() + "-";
			String MM = fechaActual.getMonth() + "-";
			String yyyy = fechaActual.getYear() + 1900 + "";
			txtFecha.setValue(dd + MM + yyyy);
			txtFecha.setDisabled(true);
			txtRecibidoPor.setDisabled(true);
			txtEstado.setValue("Por Entregar");
			txtEstado.setDisabled(true);
			// pedimos de la sesion el usuario
			// Usuario u = (Usuario)
			// FacesUtils.getSession().getAttribute("usuario");
			// txtRecibidoPor.setValue(u.getTipoUsuario());
			txtRecibidoPor.setValue("4");
			txtNombre.setDisabled(true);
			txtPrimerA.setDisabled(true);
			txtSegundoA.setDisabled(true);

		} catch (Exception e) {
			System.out.println("Error cargando los tipos de correspondencia");
		}

		return cmbTipoCorrespondencia;
	}

	public HtmlInputText getTxtNoCorrDto() {
		return txtNoCorrDto;
	}

	public void setTxtNoCorrDto(HtmlInputText txtNoCorrDto) {
		this.txtNoCorrDto = txtNoCorrDto;
	}

	public HtmlInputText getTxtNoDocDto() {
		return txtNoDocDto;
	}

	public void setTxtNoDocDto(HtmlInputText txtNoDocDto) {
		this.txtNoDocDto = txtNoDocDto;
	}

	public HtmlCommandButton getBtnBuscarDto() {
		return btnBuscarDto;
	}

	public void setBtnBuscarDto(HtmlCommandButton btnBuscarDto) {
		this.btnBuscarDto = btnBuscarDto;
	}

	public HtmlCommandButton getBtnEntregarDto() {
		return btnEntregarDto;
	}

	public void setBtnEntregarDto(HtmlCommandButton btnEntregarDto) {
		this.btnEntregarDto = btnEntregarDto;
	}

	public List<DtoCorrespondencia> getListaDto() {
		return listaDto;
	}

	public void setListaDto(List<DtoCorrespondencia> listaDto) {
		this.listaDto = listaDto;
	}

	public HtmlCommandButton getBtnLimpiar() {
		return btnLimpiar;
	}

	public void setBtnLimpiar(HtmlCommandButton btnLimpiar) {
		this.btnLimpiar = btnLimpiar;
	}

	public HtmlInputText getTxtNoCorrBuscar() {
		return txtNoCorrBuscar;
	}

	public void setTxtNoCorrBuscar(HtmlInputText txtNoCorrBuscar) {
		this.txtNoCorrBuscar = txtNoCorrBuscar;
	}

	public HtmlCommandButton getBtnConsultarCorr() {
		return btnConsultarCorr;
	}

	public void setBtnConsultarCorr(HtmlCommandButton btnConsultarCorr) {
		this.btnConsultarCorr = btnConsultarCorr;
	}

	public List<Correspondencia> getCorrEncontradas() {
		return corrEncontradas;
	}

	public void setCorrEncontradas(List<Correspondencia> corrEncontradas) {
		this.corrEncontradas = corrEncontradas;
	}

	public HtmlInputText getTxtNoDoc() {
		return txtNoDoc;
	}

	public void setTxtNoDoc(HtmlInputText txtNoDoc) {
		this.txtNoDoc = txtNoDoc;
	}

	public HtmlInputText getTxtNombre() {
		return txtNombre;
	}

	public void setTxtNombre(HtmlInputText txtNombre) {
		this.txtNombre = txtNombre;
	}

	public HtmlInputText getTxtPrimerA() {
		return txtPrimerA;
	}

	public void setTxtPrimerA(HtmlInputText txtPrimerA) {
		this.txtPrimerA = txtPrimerA;
	}

	public HtmlInputText getTxtSegundoA() {
		return txtSegundoA;
	}

	public void setTxtSegundoA(HtmlInputText txtSegundoA) {
		this.txtSegundoA = txtSegundoA;
	}

	public HtmlCommandButton getBtnBuscar() {
		return btnBuscar;
	}

	public void setBtnBuscar(HtmlCommandButton btnBuscar) {
		this.btnBuscar = btnBuscar;
	}

	public HtmlInputText getTxtEstado() {

		return txtEstado;
	}

	public void setTxtEstado(HtmlInputText txtEstado) {
		this.txtEstado = txtEstado;
	}

	public void setCmbTipoCorrespondencia(
			HtmlSelectOneMenu cmbTipoCorrespondencia) {
		this.cmbTipoCorrespondencia = cmbTipoCorrespondencia;
	}

	public List<TipoCorrespondencia> getListaTipoCorrespondencia() {
		return listaTipoCorrespondencia;
	}

	public void setListaTipoCorrespondencia(
			List<TipoCorrespondencia> listaTipoCorrespondencia) {
		this.listaTipoCorrespondencia = listaTipoCorrespondencia;
	}

	public List<SelectItem> getTipos() {
		return tipos;
	}

	public void setTipos(List<SelectItem> tipos) {
		this.tipos = tipos;
	}

	public void setTxtNoCorrespondencia(HtmlInputText txtNoCorrespondencia) {
		this.txtNoCorrespondencia = txtNoCorrespondencia;
	}

	public HtmlInputText getTxtNoCorrespondencia() {

		return txtNoCorrespondencia;
	}

	public HtmlInputTextarea getAreaAsunto() {
		return areaAsunto;
	}

	public void setAreaAsunto(HtmlInputTextarea areaAsunto) {
		this.areaAsunto = areaAsunto;
	}

	public HtmlInputText getTxtNoRecepcion() {
		return txtNoRecepcion;
	}

	public void setTxtNoRecepcion(HtmlInputText txtNoRecepcion) {
		this.txtNoRecepcion = txtNoRecepcion;
	}

	public Date getFechaActual() {
		return fechaActual;
	}

	public void setFechaActual(Date fechaActual) {
		this.fechaActual = fechaActual;
	}

	public HtmlInputText getTxtFecha() {

		return txtFecha;
	}

	public void setTxtFecha(HtmlInputText txtFecha) {
		this.txtFecha = txtFecha;
	}

	public HtmlInputTextarea getAreaObservacion() {
		return areaObservacion;
	}

	public void setAreaObservacion(HtmlInputTextarea areaObservacion) {
		this.areaObservacion = areaObservacion;
	}

	public HtmlInputText getTxtRecibidoPor() {
		return txtRecibidoPor;
	}

	public void setTxtRecibidoPor(HtmlInputText txtRecibidoPor) {
		this.txtRecibidoPor = txtRecibidoPor;
	}

	public HtmlCommandButton getBtnGuardar() {
		return btnGuardar;
	}

	public void setBtnGuardar(HtmlCommandButton btnGuardar) {
		this.btnGuardar = btnGuardar;
	}

	public HtmlCommandButton getBtnCancelar() {
		return btnCancelar;
	}

	public void setBtnCancelar(HtmlCommandButton btnCancelar) {
		this.btnCancelar = btnCancelar;
	}

}
